package com.example.archive.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.archive.entity.ArchiveModificationRequest;
import com.example.archive.service.ArchiveModificationRequestService;
import com.example.archive.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 档案修改流程管理控制器
 * 提供档案修改申请的提交、审批、执行等功能
 * 支持完整的修改流程：申请 -> 审批 -> 执行 -> 完成
 */
@RestController
@RequestMapping("/api/archive-modification-requests")
@CrossOrigin
public class ArchiveModificationRequestController {
    
    @Autowired
    private ArchiveModificationRequestService modificationRequestService;
    
    /**
     * 分页查询修改请求
     * 支持分页查询，包含申请人、审批人、档案信息
     * 
     * @param current 当前页码，默认为1
     * @param size 每页大小，默认为10
     * @return 统一响应格式，包含分页查询结果
     */
    @GetMapping("/page")
    public Result<Page<ArchiveModificationRequest>> getRequestsPage(
            @RequestParam(defaultValue = "1") int current,
            @RequestParam(defaultValue = "10") int size) {
        try {
            Page<ArchiveModificationRequest> page = modificationRequestService.getRequestsWithDetails(current, size);
            return Result.success(page);
        } catch (Exception e) {
            return Result.fail(500, "获取失败：" + e.getMessage());
        }
    }
    
    /**
     * 提交修改申请
     * 普通员工可以提交档案修改申请（主要用于个人档案修改）
     * 申请提交后状态为pending，等待企业领导审批
     * 
     * @param request 修改申请对象
     * @return 统一响应格式，包含提交结果
     */
    @PostMapping("/submit")
    public Result<Boolean> submitRequest(@RequestBody ArchiveModificationRequest request) {
        try {
            boolean success = modificationRequestService.submitModificationRequest(request);
            if (success) {
                return Result.success(true);
            } else {
                return Result.fail(500, "提交失败");
            }
        } catch (Exception e) {
            return Result.fail(500, "提交失败：" + e.getMessage());
        }
    }
    
    /**
     * 审批修改申请
     * 企业领导审批档案修改申请
     * 审批通过后状态变为approved，驳回后状态变为rejected
     * 
     * @param id 申请ID
     * @param status 审批状态（approved/rejected）
     * @param remark 审批备注
     * @param approverId 审批人用户ID
     * @return 统一响应格式，包含审批结果
     */
    @PutMapping("/approve/{id}")
    public Result<Boolean> approveRequest(
            @PathVariable Integer id,
            @RequestParam String status,
            @RequestParam String remark,
            @RequestParam Integer approverId) {
        try {
            boolean success = modificationRequestService.approveModificationRequest(id, status, remark, approverId);
            if (success) {
                return Result.success(true);
            } else {
                return Result.fail(500, "审批失败");
            }
        } catch (Exception e) {
            return Result.fail(500, "审批失败：" + e.getMessage());
        }
    }
    
    /**
     * 执行修改
     * 档案管理员执行已审批通过的修改申请
     * 执行时会实际修改档案内容，完成后状态变为completed
     * 
     * @param id 申请ID
     * @param executeRemark 执行备注
     * @param executorId 执行人用户ID
     * @return 统一响应格式，包含执行结果
     */
    @PutMapping("/execute/{id}")
    public Result<Boolean> executeModification(
            @PathVariable Integer id,
            @RequestParam String executeRemark,
            @RequestParam Integer executorId) {
        try {
            boolean success = modificationRequestService.executeModification(id, executeRemark, executorId);
            if (success) {
                return Result.success(true);
            } else {
                return Result.fail(500, "执行失败");
            }
        } catch (Exception e) {
            return Result.fail(500, "执行失败：" + e.getMessage());
        }
    }
} 